package com.senlingspace.common.enums;

import java.util.Arrays;

/**
 * 拉卡拉响应码
 *
 * @author lebronjames
 * @date 2024/07/24
 */
public enum LakalaResponseCodeEnum {

    BBS00000("成功", "成功、交易结束（下单完成、支付成功、退款成功、撤销成功、关单成功、查询成功等）"),
    BBS11112("交易结果未知", "账户端接口返回错误，交易状态不明确，需要通过查单确认交易结果"),
    BBS11105("用户支付中", "用户支付中"),
    BBS10000("交易状态为支付中", "交易状态为支付中"),
    BBS00001("系统异常", "系统异常，不可预见的异常捕获（订单号生成异常、数据库操作失败）"),
    BBS00100("网络请求失败", "网络请求失败，一般为DNS解析失败或TCP连接建立失败，以及非200响应"),
    BBS00101("网络请求超时", "网络请求超时，连接时间或响应时间大于设置时间"),
    BBS11000("参数校验失败", "请求参数校验失败"),
    BBS11200("验签失败", "验签失败"),
    BBS11106("未查到参数", "未查到交易码参数"),
    BBS11107("交易不存在", "账户端返回该流水不存在"),
    BBS11110("不允许做该交易", "反交易时，交易状态、交易类型判断"),
    BBS11111("订单号已存在", "数据库已存在商户流水信息"),
    BBS11114("订单不存在", "数据库不存在该笔订单"),
    BBS11170("机构信息不存在", "未查到机构信息"),
    BBS11172("商户信息不存在", "未查到商户信息"),
    BBS11199("微信子商户信息不存在", "微信子商户信息不存在"),
    BBS11198("支付宝子商户信息不存在", "支付宝子商户信息不存在"),
    BBS11197("银联二维码子商户信息不存在", "银联二维码子商户信息不存在"),
    BBS11177("该终端不存在", "未查到终端信息"),
    BBS11178("该终端卡应用信息不存在", "未查到终端卡应用信息"),
    BBS11182("交易权限已关闭", "权限位判断"),
    BBS11183("交易权限未开通", "无此权限位"),
    BBS11184("该商户已停用", "该商户已停用"),
    BBS11185("该终端已停用", "该终端已停用"),
    BBS11109_SINGLE("交易金额超过单笔限额", "商户限额单笔判断"),
    BBS11109_DAILY("已超单日累计限额", "商户限额日累计判断"),
    BBS11109_MONTHLY("已超单月累计限额", "商户限额月累计判断"),
    MERCHANT_QUERY_TRANS_000000("000000", "查询服务费（成功）");

    private final String briefDescription;
    private final String detailedDescription;

    LakalaResponseCodeEnum(String briefDescription, String detailedDescription) {
        this.briefDescription = briefDescription;
        this.detailedDescription = detailedDescription;
    }

    public static LakalaResponseCodeEnum fromCode(String code) {
        return Arrays.stream(values())
                .filter(lakalaResponseCodeEnum -> lakalaResponseCodeEnum.name().equals(code))
                .findFirst()
                .orElse(null);
    }

    public String getBriefDescription() {
        return briefDescription;
    }

    public String getDetailedDescription() {
        return detailedDescription;
    }
}
